/**
 *  Autor：厉高歌
 */
package com.ymatou.iapi.brand.testcase;


import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import org.json.JSONObject;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;

import com.ymatou.iapi.brand.service.AddProductBrandCall;
import com.ymatou.iapi.brand.service.AddProductBrandTagCall;
import com.ymt.core.tool.FormatUtil;
import com.ymt.core.tool.Logger;
import com.ymt.utils.annotation.TestCase;
import com.ymt.utils.annotation.TestSuite;
import com.ymt.utils.tag.P1;
import com.ymttest.database.mongo.ProductBrandInfoWapper;
import com.ymttest.database.sqlwapper.YmtProductBrandTagWapper;
import com.ymttest.utils.YMTDateUtil;
@TestSuite
public class Ts_AddProductBrandTag {
	private static String dateformat = "yyyy-MM-dd HH:mm:ss.SSS";
	@BeforeClass
	public static void setUp() {
		Logger.createResultFile("为标准品牌添加品牌别名");
	}

	@Before
	public void caseUp() {
	}

	@AfterClass
	public static void tearDown() {
		Logger.generateResult(new AddProductBrandTagCall().getOpurl());
	}
	
	@After
	public void caseDown() {
		Logger.end();
	}

	
	 /**
	  * 为标准品牌添加品牌别名，数据正常落地成功
	  */
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_001(){
		Logger.start(true,"为标准品牌添加品牌别名，数据正常落地成功");
		try{
			//添加一个品牌
			Integer BrandId=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm=new HashMap<String, Object>();
			mm.put("BrandId", BrandId);
			mm.put("TagName", "品牌别名"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Sort", (int)(Math.random()*10000));
			mm.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			JSONObject ret=AddProductBrandTagCall.addProductBrandTagCall(mm);
			
			//响应断言
			Logger.verifyIsContains(200, ret.get("Code"), "响应信息返回值code：200");
			Logger.verifyIsContains("操作成功", ret.get("Msg"), "响应信息返回值Msg：操作成功");
			
			//SQL数据校验
			YmtProductBrandTagWapper ymtProductBrandTagWapper=new YmtProductBrandTagWapper();
			List <Map>SqlRet=ymtProductBrandTagWapper.getProductBrandTagByBrandId(BrandId);
			//写入数据校验
			Logger.verifyEquals(mm.get("BrandId"), SqlRet.get(0).get("BrandId"), "品牌别名信息表品牌ID BrandId，SQL落地验证");
			Logger.verifyEquals(mm.get("TagName"), SqlRet.get(0).get("TagName"), "品牌别名信息表品牌别名TagName，SQL落地验证");
			Logger.verifyEquals(mm.get("Sort"), SqlRet.get(0).get("Sort"), "品牌别名信息表别名序号Sort，SQL落地验证");
			Logger.verifyEquals(mm.get("AddUser"), SqlRet.get(0).get("AddUser"), "品牌别名信息表添加人AddUser，SQL落地验证");
			//默认数据验证
			Logger.verifyEquals(0, SqlRet.get(0).get("Status"), "品牌别名信息表默认添加记录状态Status为0，SQL落地验证");
			Logger.verifyEquals(mm.get("Sort"), SqlRet.get(0).get("Sort"), "品牌别名信息表别名序号Sort，SQL落地验证");
			
			//Mongo验证
			ProductBrandInfoWapper productBrandInfoWapper=new ProductBrandInfoWapper();
			List <Map>mongoRet=productBrandInfoWapper.getProductBrandInfoByBrandId(BrandId);
			org.json.JSONArray TagList= new org.json.JSONArray( FormatUtil.beanToGSONString(mongoRet.get(0).get("TagList")));
			Logger.verifyEquals(mm.get("BrandId"), TagList.getJSONObject(0).get("BrandId"), "品牌别名信息表品牌ID BrandId，Mongo落地验证");
			Logger.verifyEquals(mm.get("TagName"), TagList.getJSONObject(0).get("TagName"), "品牌别名信息表品牌别名TagName，Mongo落地验证");
			Logger.verifyEquals(mm.get("Sort"), TagList.getJSONObject(0).get("Sort"), "品牌别名信息表别名序号Sort，Mongo落地验证");
			Logger.verifyEquals(mm.get("AddUser"), TagList.getJSONObject(0).get("AddUser"), "品牌别名信息表添加人AddUser，Mongo落地验证");
			Logger.verifyEquals(SqlRet.get(0).get("AddTime"), TagList.getJSONObject(0).get("AddTime"), "品牌别名信息表添加时间与SQL一致，Mongo落地验证");
			Logger.verifyEquals(0, TagList.getJSONObject(0).get("Status"), "品牌别名信息表Status默认为0，Mongo落地验证");
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	 /**
	  * 对同一品牌增加两个相同的别名，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_002(){
		Logger.start(false,"对同一品牌增加两个相同的别名，添加失败");
		try{
			//添加一个品牌
			Integer BrandId=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm=new HashMap<>();
			mm.put("BrandId", BrandId);
			mm.put("TagName", "品牌别名"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Sort", (int)(Math.random()*10000));
			mm.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			addProductBrandTagCall.callAndGetReturnData(mm);
			//重复添加相同的别名
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm);
			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
		
	}
	
	 /**
	  * 为标准品牌添加两个不同的别名，正常添加
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_003(){
		Logger.start(true,"为标准品牌添加两个不同的别名，正常添加");
		try{
			//添加一个品牌
			Integer BrandId=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId);
			mm1.put("TagName", "品牌别名"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			addProductBrandTagCall.callAndGetReturnData(mm1);
			//重复添加相同的别名
			Map<String,Object> mm2=new HashMap<>();
			mm2.put("BrandId", BrandId);
			mm2.put("TagName", "品牌别名2"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Sort", (int)(Math.random()*10000));
			mm2.put("AddUser", "Lgg");
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm2);
			
			//响应断言
			Logger.verifyIsContains(200, ret.get("Code"), "响应信息返回值code：200");
			Logger.verifyIsContains("操作成功", ret.get("Msg"), "响应信息返回值Msg：操作成功");
			
            //SQL数据校验
            YmtProductBrandTagWapper ymtProductBrandTagWapper=new YmtProductBrandTagWapper();
            List <Map>SqlRet=ymtProductBrandTagWapper.getProductBrandTagByBrandId(BrandId);
            //写入数据校验
            Logger.verifyEquals(mm1.get("BrandId"), SqlRet.get(0).get("BrandId"), "SQL落地验证-第1次品牌别名信息表品牌ID BrandId");
            Logger.verifyEquals(mm1.get("TagName"), SqlRet.get(0).get("TagName"), "SQL落地验证-第1次品牌别名信息表品牌别名TagName");
            Logger.verifyEquals(mm1.get("Sort"), SqlRet.get(0).get("Sort"), "SQL落地验证-第1次品牌别名信息表别名序号Sort");
            Logger.verifyEquals(mm1.get("AddUser"), SqlRet.get(0).get("AddUser"), "SQL落地验证-第1次品牌别名信息表添加人AddUser");
            //第二个别名数据验证
            Logger.verifyEquals(mm2.get("BrandId"), SqlRet.get(1).get("BrandId"), "SQL落地验证第2次品牌别名信息表品牌ID BrandId");
            Logger.verifyEquals(mm2.get("TagName"), SqlRet.get(1).get("TagName"), "SQL落地验证第2次品牌别名信息表品牌别名TagName");
            Logger.verifyEquals(mm2.get("Sort"), SqlRet.get(1).get("Sort"), "SQL落地验证第2次品牌别名信息表别名序号Sort");
            Logger.verifyEquals(mm2.get("AddUser"), SqlRet.get(1).get("AddUser"), "SQL落地验证第2次品牌别名信息表添加人AddUser");
            //Mongo验证1
            ProductBrandInfoWapper productBrandInfoWapper=new ProductBrandInfoWapper();
            List <Map>mongoRet=productBrandInfoWapper.getProductBrandInfoByBrandId(BrandId);
            org.json.JSONArray TagList= new org.json.JSONArray( FormatUtil.beanToGSONString(mongoRet.get(0).get("TagList")));
            Logger.verifyEquals(mm1.get("BrandId"), TagList.getJSONObject(0).get("BrandId"), "Mongo落地验证_第1次品牌别名信息表品牌ID BrandId");
            Logger.verifyEquals(mm1.get("TagName"), TagList.getJSONObject(0).get("TagName"), "Mongo落地验证_第1次品牌别名信息表品牌别名TagName");
            Logger.verifyEquals(mm1.get("Sort"), TagList.getJSONObject(0).get("Sort"), "Mongo落地验证_第1次品牌别名信息表别名序号Sort");
            Logger.verifyEquals(mm1.get("AddUser"), TagList.getJSONObject(0).get("AddUser"), "Mongo落地验证_第1次品牌别名信息表添加人AddUser");
            Logger.verifyEquals(SqlRet.get(0).get("AddTime"), TagList.getJSONObject(0).get("AddTime"), "Mongo落地验证_第1次品牌别名信息表添加时间与SQL一致");
            Logger.verifyEquals(0, TagList.getJSONObject(0).get("Status"), "Mongo落地验证_第1次品牌别名信息表Status默认为0");
            //Mongo验证2
            Logger.verifyEquals(mm2.get("BrandId"), TagList.getJSONObject(1).get("BrandId"), "Mongo落地验证_第2次品牌别名信息表品牌ID BrandId");
            Logger.verifyEquals(mm2.get("TagName"), TagList.getJSONObject(1).get("TagName"), "Mongo落地验证_第2次品牌别名信息表品牌别名TagName");
            Logger.verifyEquals(mm2.get("Sort"), TagList.getJSONObject(1).get("Sort"), "Mongo落地验证_第2次品牌别名信息表别名序号Sort");
            Logger.verifyEquals(mm2.get("AddUser"), TagList.getJSONObject(1).get("AddUser"), "Mongo落地验证_第2次品牌别名信息表添加人AddUser");
            Logger.verifyEquals(SqlRet.get(0).get("AddTime"), TagList.getJSONObject(1).get("AddTime"), "Mongo落地验证_第2次品牌别名信息表添加时间与SQL一致");
            Logger.verifyEquals(0, TagList.getJSONObject(1).get("Status"), "Mongo落地验证_第2次品牌别名信息表Status默认为0");
           
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	 /**
	  * 新增别名与该品牌的中文名重复，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_004(){
		Logger.start(false,"新增别名与该品牌的中文名重复，添加失败");
		try{
			//添加一个品牌
			Map<String, Object> mm=new HashMap<String,Object>();
			mm.put("KeyWord", "Lgg");
			mm.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandEnName", "Adidas"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Operator", "Lgg");
			mm.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			Integer BrandId=AddProductBrandCall.callAndGetBrandId(mm);
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId);
			mm1.put("TagName", mm.get("BrandName"));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm1);

			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	
	 /**
	  * 新增别名与该品牌的英文名重复，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_005(){
		Logger.start(false,"新增别名与该品牌的英文名重复，添加失败");
		try{
			//添加一个品牌
			Map<String, Object> mm=new HashMap<String,Object>();
			mm.put("KeyWord", "Lgg");
			mm.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandEnName", "Adidas"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Operator", "Lgg");
			mm.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			Integer BrandId=AddProductBrandCall.callAndGetBrandId(mm);
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId);
			mm1.put("TagName", mm.get("BrandEnName"));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm1);

			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}

	 /**
	  * 新增别名与库里存在其他品牌的中文名重复，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_006(){
		Logger.start(false,"新增别名与库里存在其他品牌的中文名重复，添加失败");
		try{
			//添加一个品牌
			Map<String, Object> mm=new HashMap<String,Object>();
			mm.put("KeyWord", "Lgg");
			mm.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandEnName", "Adidas"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Operator", "Lgg");
			mm.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			Integer BrandId=AddProductBrandCall.callAndGetBrandId(mm);
			
			Integer BrandId1=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId1);
			mm1.put("TagName", mm.get("BrandName"));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm1);
			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	 /**
	  * 新增别名与库里存在其他品牌的英文名重复，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_007(){
		Logger.start(false,"新增别名与库里存在其他品牌的英文名重复，添加失败");
		try{
			//添加一个品牌
			Map<String, Object> mm=new HashMap<String,Object>();
			mm.put("KeyWord", "Lgg");
			mm.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandEnName", "Adidas"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Operator", "Lgg");
			mm.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			Integer BrandId=AddProductBrandCall.callAndGetBrandId(mm);
			
			Integer BrandId1=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId1);
			mm1.put("TagName", mm.get("BrandEnName"));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			AddProductBrandTagCall addProductBrandTagCall=new AddProductBrandTagCall();
			JSONObject ret=addProductBrandTagCall.callAndGetReturnData(mm1);
			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	 /**
	  * 新增别名与库里存在其他品牌的别名重复，添加失败
	  */	
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrandTag_008(){
		Logger.start(false,"新增别名与库里存在其他品牌的别名重复，添加失败");
		try{
			//添加一个品牌
			Integer BrandId1=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", BrandId1);
			mm1.put("TagName","品牌别名"+YMTDateUtil.getSysTime(dateformat) );
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			//添加第一个品牌的别名
			AddProductBrandTagCall.addProductBrandTagCall(mm1);
			//添加第二个品牌
			Integer BrandId2=AddProductBrandCall.addProductBrandCall();
			//修改请求参数
			Map<String,Object> mm2=new HashMap<>();
			mm2.put("BrandId", BrandId2);
			mm2.put("TagName", mm1.get("TagName"));
			mm2.put("Sort", (int)(Math.random()*10000));
			mm2.put("AddUser", "Lgg");
			//发送请求，添加该品牌的别名
			JSONObject ret=AddProductBrandTagCall.addProductBrandTagCall(mm2);
			//响应断言
			Logger.verifyNotEquals(200, ret.get("Code"), "响应信息返回值code不为200");
			Logger.verifyNotEquals("操作成功", ret.get("Msg"), "响应信息返回值Msg不为操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	
}
